home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / comm / tcp / rxsocket.lha / rxsocket / examples / pserv.rexx < prev    next >
OS/2 REXX Batch file  |  2000-11-28  |  2KB  |  55 lines

  1. /*
  2.     This macro shows how to write a very simple tcp service
  3.     to be called by inetd.
  4.     To use this service, you must:
  5.     - be sure you copied "rxs" from rxsocket.lha to C:
  6.     - copy pserv.rexx TO ram:
  7.     - add to the services database:
  8.         ARexxRevServ 4000/tcp
  9.     - add to the inedt database:
  10.         ARexxRevServ stream tcp nowait root c:rxs rxs ram:pserv.rexx
  11.     (port number 4000 can be changed to any free tcp port).
  12.     To test the service just use revclient.
  13.     if the env var "PSERV_LOG" is set to 1, it logs the connection.
  14. */
  15.  
  16. l="rexxsupport.library";if ~show("L",l) then;if ~addlib(l,0,-30) then do;say "can't find" l;exit;end
  17. l="rmh.library";if ~show("L",l) then;if ~addlib(l,0,-30) then do;say "can't find" l;exit;end
  18. l="rxsocket.library";if ~show("L",l) then;if ~addlib(l,0,-30) then do;say "can't find" l;exit;end
  19.  
  20. prg = ProgramName("NOEXT")
  21.  
  22. /* Here we test if socket number 0 exists.
  23.    If it does we were called from inetd.
  24.    If it doesn't, we weren't called from inetd and we exit. */
  25. if ~IsSocket(0) then do
  26.     say prg": this service must be run from rxs in inedt"
  27.     exit
  28. end
  29.  
  30. /* who connected us? Let's try to get info, if error log that */
  31. if ~GetSockName(0,"NAME")<0 then do
  32.     call SysLog(prg "Can't get peer info ("errno()")")
  33.     exit
  34. end
  35.  
  36. if getclip("PSERV_LOG")==1 then do
  37.     /* log the connection */
  38.     msg = "pserv Connection from" name.addrAddr
  39.     if GetHostByAddr("HOST",name.addrAddr) then msg = msg  "("host.hostName")"
  40.     call SysLog(msg)
  41. end
  42.  
  43. /* the service itself */
  44. len = recv(0,"BUF",256)
  45. if len<0 then do
  46.     call SysLog("pserv Error reading ("errno()")")
  47.     exit
  48. end
  49.  
  50. buf = reverse(buf)
  51. if send(0,BUF)~=length(buf) then do
  52.     call SysLog("pserv Error sending ("errno()")")
  53.     exit
  54. end
  55.